package com.ruoyi.demo.controller.sendEvent;

import cn.dev33.satoken.annotation.SaIgnore;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.demo.domain.TestDemo;
import com.ruoyi.demo.service.ITestDemoService;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.transaction.Transaction;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.sql.rowset.serial.SerialException;

/**
 * <简述>
 * <详细描述>
 *
 * @author syf
 * @date 2024年05月15日 9:59
 */
@Slf4j
@RestController
@RequiredArgsConstructor
public class SpringEventTestController {
    @Autowired
    private  ITestDemoService iTestDemoService;

    @RequestMapping("send")
    @SaIgnore
    public R sendInfo(){
        TestDemo testDemo = new TestDemo();
        testDemo.setId(1L);
        testDemo.setUserId(1L);
        testDemo.setValue("send");
        log.info("----------------->发送请求");
        SpringUtils.context().publishEvent(testDemo);
        return R.ok();
    }

    @RequestMapping("sendError")
    @Transactional
    @SaIgnore
    public void sendError() {
        //更新事务
        iTestDemoService.queryById(1L);
        TestDemo testDemo = new TestDemo();
        testDemo.setId(1L);
        log.info("----------------->发送请求");
        SpringUtils.context().publishEvent(testDemo);
        //抛出异常触发回滚
        throw new ServiceException("error啦,回滚上面事务吧。。。。。。。");
    }
}
